package com.kmxd.ams.client.oss;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.kmxd.ams.client.oss.dto.EfileRecordDTO;
import com.kmxd.ams.client.oss.dto.EfileRecordEditDTO;
import com.kmxd.ams.client.oss.dto.EfileRecordQueryDTO;
import com.kmxd.ams.client.oss.dto.EfileSortDTO;
import com.kmxd.ams.client.oss.vo.EfileRecordListVO;
import com.kmxd.ams.client.oss.vo.EfileRecordVO;
import com.kmxd.ams.core.oss.bo.OssFile;
import com.kmxd.ams.infra.oss.entity.EfileRecord;
import java.io.File;
import java.util.List;
import java.util.Set;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

/**
 * 电子文件表 服务类
 *
 * @author ZuoLG
 * @since 2022-07-25
 */
public interface IEfileRecordSvc extends IService<EfileRecord> {

  /**
   * 分页查询
   *
   * @param reqPage
   * @param req
   * @return
   */
  Page<EfileRecordListVO> selectPage(Page reqPage, EfileRecordQueryDTO req);

  /**
   * 查询列表
   *
   * @param req
   * @return
   */
  List<EfileRecordListVO> selectList(EfileRecordQueryDTO req);

  /**
   * 文件上传
   *
   * @param file
   * @param recordDTO
   * @return
   * @throws Exception
   */
  EfileRecordVO upload(MultipartFile file, EfileRecordDTO recordDTO) throws Exception;

  /**
   * 文件上传
   *
   * @param file
   * @param recordDTO
   * @return
   * @throws Exception
   */
  @Transactional(rollbackFor = Exception.class)
  EfileRecordVO upload(File file, EfileRecordDTO recordDTO) throws Exception;

  /**
   * 上传文件到临时文件
   *
   * @param file
   * @param recordDTO
   * @return
   * @throws Exception
   */
  EfileRecordVO uploadTemp(MultipartFile file, EfileRecordDTO recordDTO) throws Exception;

  /**
   * 删除
   *
   * @param ids
   */
  void remove(String ids);

  /**
   * 删除,ids
   *
   * @param ids
   */
  void remove(Set<Long> ids);

  /**
   * 根据文件ids删除
   *
   * @param docIds
   */
  void removeByDocIds(Set<Long> docIds);

  /**
   * 根据文件ids获取电子文件
   *
   * @param docIds
   * @return
   */
  List<EfileRecordListVO> selectListByDocIds(Set<Long> docIds);

  /**
   * 根据档案门类查询电子文件
   *
   * @param archTypeId
   * @param docIds
   * @return
   */
  List<EfileRecordListVO> selectListByDocIds(Long archTypeId, Set<Long> docIds);

  /**
   * 根据文件docIds修改内容
   *
   * @param docIds
   * @return
   */
  boolean archivingFile(Set<Long> docIds);

  /**
   * 修改
   *
   * @param req
   */
  void edit(EfileRecordEditDTO req);

  /**
   * 查看
   *
   * @param id
   * @return
   */
  EfileRecordVO view(Long id);

  /**
   * 根据类型及状态获取使用地址
   *
   * @param defPath
   * @param arrangeStatus
   * @return
   */
  String getBasePathByArrangeStatus(String defPath, Integer arrangeStatus);

  /**
   * 预览
   *
   * @param id
   * @return
   */
  EfileRecordVO pdfPreview(Long id, Integer type);

  /**
   * 批量修改排序
   *
   * @param req
   * @return
   */
  boolean updateSort(EfileSortDTO req);

  /**
   * 验证电子文件md5
   *
   * @param req
   * @return
   */
  boolean efileMd5Check(EfileRecordEditDTO req);

  /**
   * 导出zip包
   *
   * @param req
   * @return
   */
  OssFile exportZip(EfileRecordQueryDTO req);

  /**
   * 勾选批量下载
   *
   * @param ids
   * @return
   */
  OssFile exportBatch(String ids, String docIds, String volIds);

  String newFileNameAndPath(String path, String suffixFileName, File file);
}
